<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>RegExp</title>
	<!--<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>-->
</head>
<body>
<script>
	/**
	 * 正则表达式是一种用来匹配字符串的强有力的武器,它的设计思想是用一种描述性的语言来给字符串定义一个规则，
	 * 凡是符合规则的字符串，我们就认为它“匹配”了，否则，该字符串就是不合法的。
	 * 正则表达式的用途很广
	 * 例如：匹配用户输入的e-mail是否合法
	 *      用户输入的用户名是否合法
	 */
	/**
	 * 正则表达式也是用字符串表示的，我们先要了解“正则表达式字符串”的定义规则
	 * 1,如果直接给出字符就是精确匹配
	 * 2,'\d':匹配一个数字
	 * 3,'\w':匹配一个字母/数字
	 *  3.1,'00\d' 可以匹配 '003'
	 *  3.2,'\d\d\d' 可以匹配 '010'
	 *  3.3,'\w\w' 可以匹配 'py'
	 * 4,'.' 可以匹配任意一个字符
	 * 5，变长字符串的匹配
	 *  5.1,'*' 表示任意个字符，包括0个
	 *  5.2,'+' 表示至少有一个字符
	 *  5.3,'?' 表示0个/1个
	 *  5.4,{n} 表示n个字符
	 *  5.5,{n,m} 表示n-m个字符
	 */

	/**
	 * \d{3} 匹配三个数字
	 * \s 可以匹配一个空格，也包括Tab等空白格
	 * \s+ 表示可以匹配 一个或者多个空格例如 '  ' '\t\t'等
	 * \d{3,8} 表示匹配3-8个数字
	 */
	let reg1 = '\d{3}\s+\d{3,8}'
	/**
	 *匹配 前一个字符
	 *     后面19个字符
	 */
	let reg2 = '[a-zA-Z\_][a-zA-Z\_\$]{0,19}'

	// A|B 可以匹配A或者B
	// (J|j)ava(S|s)cript 可以匹配
	// 1:Javascript
	// 2:jacascript
	// 3:JavaScript
	// 4:javaScript
	/**
	 * ^ 表示开头 '^\d':表示以数字开头
	 * $ 表示结尾 '\d$':表示以数字结尾
	 */

	/**
	 * javaScript 创建正则表达是的两种方式
	 */
	//1:
	let reg3 = /ABC\-001/;
	//2:字符串的两个反斜杠相当于1个反斜杠
	let reg4 = new RegExp('ABC\\-001');


	//切分字符串
	var str1 = 'a  b    c'.split(' ');
	console.log("'a  b    c'.split(''):" + str1);

	var str2 = 'a  b   c    d'.split(/\s+/);
	console.log("'a  b   c    d'.split(/\s+/):" + str2);

	var str3 = 'a,b  c,   d  e'.split(/[\s\,]+/);
	console.log("'a,b  c,   d  e'.split('/[\\s\\,]+/'):" + str3);

	var str4 = 'a,b;c   d,;e'.split(/[\s\;\,]+/);
	console.log("a,b;c   d,;e'.split(/[\\s\\;\\,]+/):" + str4);

	//分组
	//正则表达式除了判断是否匹配之外，还有提取子串的功能；
	let reg5 = /^(\d{3})-(\d{5,8})$/;
	var exec5 = reg5.exec("010-12345");
	console.log("正则表达式_分组匹配_exec5:" + exec5);

	//全局搜索
  let r1 = /test/g;
  let r2 = new RegExp('test','g');
  let s = 'JavaScript, VBScript, JScript and ECMAScript';
  let r3 = /[a-zA-Z]+Script/g;
  var q1 = r3.exec(s);
  var q2 = r3.exec(s);
  var q3 = r3.exec(s);
  var q4 = r3.exec(s);
  var q5 = r3.exec(s);
  console.log("第1次执行 r3.exec(s):" + q1);
  console.log("第2次执行 r3.exec(s):" + q2);
  console.log("第3次执行 r3.exec(s):" + q3);
  console.log("第4次执行 r3.exec(s):" + q4);
  console.log("第5次执行 r3.exec(s):" + q5);

	/**
	 * 注意：
	 *  1：全局匹配类似搜索，因此不能使用/^....$/,那样最多匹配一次
	 *  2：正则表达式还可以指定
	 *    i:忽略大小写
	 *    m:执行多行匹配
	 */
</script>
</body>
</html>